package nl.moviefan.site.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;

/**
 * Child van Artikel. Annotaties zijn van Hibernate.
 */
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Table(name = "artikelfilm")
@DiscriminatorValue("artikelfilmpie")
public class ArtikelFilm extends Artikel {

    public ArtikelFilm(int vestigingID, int artikelnummer, String titel,
            boolean afgeschreven, double prijs,
            boolean status, Datadrager datadrager, Genre genre,
            Uitvoering uitvoering, int duur, String producent,
            String productiemaatschappij, String cast, String samenvatting) {
        this.setVestigingID(vestigingID);
        this.setArtikelnummer(artikelnummer);
        this.titel = titel;
        this.afgeschreven = afgeschreven;
        this.prijs = prijs;
        this.status = status;
        this.datadrager = datadrager;
        this.genre = genre;
        this.uitvoering = uitvoering;
        this.duur = duur;
        this.producent = producent;
        this.productiemaatschappij = productiemaatschappij;
        this.cast = cast;
        this.samenvatting = samenvatting;
    }

    @Column(name = "artikelnummer")
    private int artikelnummer;

    @Enumerated(EnumType.STRING)
    @Column(name = "datadrager")
    private Datadrager datadrager;

    @Enumerated(EnumType.STRING)
    @Column(name = "uitvoering")
    private Uitvoering uitvoering;

    @Column(name = "titel")
    private String titel;

    @Column(name = "genre")
    @Enumerated(EnumType.STRING)
    private Genre genre;

    @Column(name = "afgeschreven")
    private boolean afgeschreven;

    @Column(name = "prijs")
    private double prijs;

    /**
     * status is een gereserveerd woord in MySQL. Geen typo ;-)
     */
    @Column(name = "statuss")
    private boolean status;

    @Column(name = "duur")
    private int duur;

    @Column(name = "producent")
    private String producent;

    @Column(name = "productiemaatschappij")
    private String productiemaatschappij;

    @Column(name = "filmcast")
    private String cast;

    @Column(name = "samenvatting")
    private String samenvatting;

    public ArtikelFilm() {
    }

    public Datadrager getDatadrager() {
        return datadrager;
    }

    public void setDatadrager(Datadrager datadrager) {
        this.datadrager = datadrager;
    }

    public Uitvoering getUitvoering() {
        return uitvoering;
    }

    public void setUitvoering(Uitvoering uitvoering) {
        this.uitvoering = uitvoering;
    }

    public String getTitel() {
        return titel;
    }

    public void setTitel(String titel) {
        this.titel = titel;
    }

    public Genre getGenre() {
        return genre;
    }

    public void setGenre(Genre genre) {
        this.genre = genre;
    }

    public boolean isAfgeschreven() {
        return afgeschreven;
    }

    public double getPrijs() {
        return prijs;
    }

    public boolean isStatus() {
        return status;
    }

    public int getDuur() {
        return duur;
    }

    public String getProducent() {
        return producent;
    }

    public String getProductiemaatschappij() {
        return productiemaatschappij;
    }

    public String getCast() {
        return cast;
    }

    public String getSamenvatting() {
        return samenvatting;
    }

    public void setAfgeschreven(boolean afgeschreven) {
        this.afgeschreven = afgeschreven;
    }

    public void setPrijs(double prijs) {
        this.prijs = prijs;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public void setDuur(int duur) {
        this.duur = duur;
    }

    public void setProducent(String producent) {
        this.producent = producent;
    }

    public void setProductiemaatschappij(String productiemaatschappij) {
        this.productiemaatschappij = productiemaatschappij;
    }

    public void setCast(String cast) {
        this.cast = cast;
    }

    public void setSamenvatting(String samenvatting) {
        this.samenvatting = samenvatting;
    }

    public int getArtikelnummer() {
        return artikelnummer;
    }

    public void setArtikelnummer(int artikelnummer) {
        this.artikelnummer = artikelnummer;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ArtikelFilm other = (ArtikelFilm) obj;
        if (this.datadrager != other.datadrager) {
            return false;
        }
        if (this.uitvoering != other.uitvoering) {
            return false;
        }
        if ((this.titel == null) ? (other.titel != null) : !this.titel.equals(other.titel)) {
            return false;
        }
        if (this.genre != other.genre) {
            return false;
        }
        if (this.afgeschreven != other.afgeschreven) {
            return false;
        }
        if (Double.doubleToLongBits(this.prijs) != Double.doubleToLongBits(other.prijs)) {
            return false;
        }
        if (this.status != other.status) {
            return false;
        }
        if (this.duur != other.duur) {
            return false;
        }
        if ((this.producent == null) ? (other.producent != null) : !this.producent.equals(other.producent)) {
            return false;
        }
        if ((this.productiemaatschappij == null) ? (other.productiemaatschappij != null) : !this.productiemaatschappij.equals(other.productiemaatschappij)) {
            return false;
        }
        if ((this.cast == null) ? (other.cast != null) : !this.cast.equals(other.cast)) {
            return false;
        }
        if ((this.samenvatting == null) ? (other.samenvatting != null) : !this.samenvatting.equals(other.samenvatting)) {
            return false;
        }
        return true;
    }

}
